package com.fidelizarte.web.ws;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fidelizarte.common.util.SeguridadesException;
import com.fidelizarte.ejb.servicio.frontend.ServicioUsuarioRemote;
import com.fidelizarte.ejb.persistence.util.dto.CredencialesDTO;
import com.fidelizarte.ejb.persistence.vo.LoginMenuVO;
import com.fidelizarte.ejb.persistence.vo.LoginVO;
import com.fidelizarte.ejb.servicio.ServicioLogin;

/**
 * Clase que ofrece servicios web relacionados con los Usurios
 * 
 * @author Jose Auquilla
 * 
 */
@Path("/wsUsuario")
public class WSUsuario {
	private static final Logger log = LoggerFactory.getLogger(WSUsuario.class);
	private LoginVO loginVO;
	private LoginMenuVO loginMenuVO;
	private CredencialesDTO credencialesDTO;
	ServicioLogin servicioLogin;

	ServicioUsuarioRemote servicioUsuario;

	/**
	 * Metodo de web service que registra usuario en el sistema
	 * 
	 * @param usuario
	 * @param contrasenia
	 * @param apellidos
	 * @param nombres
	 * @param telefono
	 * @param email
	 * @param sexo
	 * @param empresaMain
	 * @param empresaCanal
	 * @param cargo
	 * @param estado
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosUsuario/setUsuarioCI/{usuario}/{contrasenia}/{pellidos}"
			+ "/{nombres}/{telefono}/{email}/{ci}/{empresaMain}/{empresaCanal}/{cargo}/{estado}")
	public boolean setUsuarioCI(@PathParam("usuario") String usuario,
			@PathParam("contrasenia") String contrasenia,
			@PathParam("apellidos") String apellidos,
			@PathParam("nombres") String nombres,
			@PathParam("telefono") Integer telefono,
			@PathParam("email") String email,
			@PathParam("ci") String ci,
			@PathParam("empresaMain") Integer empresaMain,
			@PathParam("empresaCanal") Integer empresaCanal,
			@PathParam("cargo") Integer cargo,
			@PathParam("estado") String estado) throws NamingException {
		log.info("setUsuarioCI web service");
		InitialContext context = new InitialContext();
		servicioUsuario = (ServicioUsuarioRemote) context
				.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioUsuarioImpl!com.fidelizarte.ejb.servicio.frontend.ServicioUsuarioRemote");
		try {

			servicioUsuario.setUsuarioCI(usuario, contrasenia, apellidos,
					nombres, telefono, email, ci, empresaMain,
					empresaCanal, cargo, estado);

		} catch (SeguridadesException e) {
			e.printStackTrace();
		}
		return true;
	}

	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/autenticarUsuario/{usuario}/{password}")
	public LoginVO autenticarUsuario(@PathParam("usuario") String usuario,
			@PathParam("password") String password) throws NamingException,
			SeguridadesException {
		log.info("setServicio web service");
		InitialContext context = new InitialContext();
		servicioLogin = (ServicioLogin) context
				.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioLoginImpl!com.fidelizarte.ejb.servicio.ServicioLogin");
		LoginVO loginVOTemp = new LoginVO();

		this.loginVO = new LoginVO();
		this.loginVO.getCredencialesDTO().setUsuario(usuario);
		this.loginVO.getCredencialesDTO().setPassword(password);
		this.loginVO = servicioLogin.autenticarUsuario(this.loginVO);
		loginVOTemp.setCredencialesDTO(this.loginVO.getCredencialesDTO());
		loginVOTemp.getUsuario().setIdUsuario(
				this.loginVO.getUsuario().getIdUsuario());
		loginVOTemp.getUsuario().setEstado(
				this.loginVO.getUsuario().getEstado());
		loginVOTemp.setIdPersona(this.loginVO.getUsuario().getPersona()
				.getIdPersona());
		loginVOTemp.setNombres(this.loginVO.getUsuario().getPersona()
				.getNombres());
		loginVOTemp.setIdPerfil(this.loginVO.getUsuario().getPerfil()
				.getIdPerfil());

		return loginVOTemp;
	}

	/**
	 * Metodo de web service que permite obtener velores de los usuarios que
	 * quieren realizar un login
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/getLoginVO")
	public LoginVO getLoginVO() throws SeguridadesException {
		log.info("getLoginVO web service");

		this.loginVO = new LoginVO();
		return this.loginVO;
	}@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/obtenerMenusPorPerfil/{perfil}")
	public LoginMenuVO obtenerMenusPorIdPerfil(@PathParam("perfil") Integer perfil) throws NamingException,
			SeguridadesException {
		log.info("obtenerMenusPorIdPerfil web service");
		InitialContext context = new InitialContext();
		servicioLogin = (ServicioLogin) context
				.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioLoginImpl!com.fidelizarte.ejb.servicio.ServicioLogin");
		this.loginMenuVO = new LoginMenuVO();
		this.loginMenuVO = servicioLogin.obtenerMenusPorIdPerfilFrontend(perfil);
		return this.loginMenuVO;
	}

	
	
}
